import { http, formDataHttp } from '../http';
import { formatTime } from '@/assets/js/utils';
import type {
	GetTermListParamsType,
	GetTermListResponseType,
	GetTerm4DayResponseType,
	GetOrganizationListParamsType,
	GetOrganizationListResponseType,
	GetCampusListParamsType,
	GetCampusListResponseType,
	GetBuildingListParamsType,
	GetBuildingListResponseType,
	GetRoomListParamsType,
	GetRoomListResponseType,
	GetCourseListParamsType,
	GetCourseListResponseType,
	GetTimeTableListParamsType,
	GetTimeTableListResponseType,
	GetCourseProjectPage4AICEResponseType
} from './base.type';

const baseUrl = '/api/base';

/**
 * @description 学期查询
 * @param {string} params.id id
 * @param {string} params.name 名称
 * @param {string} params.codes 编号,多个编号用,分隔
 * @param {string} params.year 学年
 * @param {int} params.currentPage 第几页，默认1
 * @param {int} params.numPerPage 每页条数，默认20，都为0表示查询全部
 */
export const getTermListAPI = (
	params?: GetTermListParamsType
): Promise<GetTermListResponseType> => {
	return formDataHttp.post(`${baseUrl}/base/course/term/getTermList`, params);
};

/**
 * @description 查询指定日期所在学期信息
 * @param {String} day yyyy-mm-dd
 */
export const getTerm4DayAPI = (day: string | null): Promise<GetTerm4DayResponseType> => {
	if (day) {
		return formDataHttp.post(`${baseUrl}/base/course/term/getTerm4Day`, { day });
	}
	return formDataHttp.post(`${baseUrl}/base/course/term/getTerm4Day`, {
		day: formatTime(new Date(), 'YYYY-MM-DD')
	});
};

/**
 * @description 学院查询
 * @param {string} params.id id
 * @param {string} params.code 编号
 * @param {string} params.codes 编号,多个编号用,分隔
 * @param {string} params.name 名称
 * @param {string} params.type 类型，学院：Academy；系：Department；专业：Major
 * @param {int} params.academyType 学院类型（不传查所有） 1 开课学院 2 党政管理机构 3 科研机构 100 其他
 * @param {string} params.parentCode 父组织Code
 * @param {int} params.currentPage 第几页，默认1
 * @param {int} params.numPerPage 每页条数，默认20，都为0表示查询全部
 */
export const getOrganizationListAPI = (
	params?: GetOrganizationListParamsType
): Promise<GetOrganizationListResponseType> => {
	return formDataHttp.post(`${baseUrl}/base/organization/getOrganizationList`, params);
};

/**
 * @description 通过该接口校区查询
 * @param {string} params.id 校区id
 * @param {string} params.name 校区名称
 * @param {string} params.campusCode 校区编号
 * @param {int} params.currentPage 第几页，默认0
 * @param {int} params.numPerPage 每页条数，默认0，都为0表示查询全部
 */
export const getCampusListAPI = (
	params?: GetCampusListParamsType
): Promise<GetCampusListResponseType> => {
	return formDataHttp.post(`${baseUrl}/base/room/campus/getCampusList`, params);
};

/**
 * @description 通过该接口查询教学楼列表
 * @param {string} params.id 教学楼id
 * @param {string} params.campusCode 校区code
 * @param {string} params.code 教学楼编号
 * @param {string} params.name 教学楼名称
 * @param {int} params.currentPage 第几页，默认0
 * @param {int} params.numPerPage 每页条数，默认0，都为0表示查询全部
 */
export const getBuildingListAPI = (
	params?: GetBuildingListParamsType
): Promise<GetBuildingListResponseType> => {
	return formDataHttp.post(`${baseUrl}/base/room/building/getBuildingList`, params);
};

/**
 * @description 通过该接口查询教室列表
 * @param {string} params.id 教室id
 * @param {string} params.code 教室编号
 * @param {string} params.name 教室名称
 * @param {string} params.roomTypeId 教室类型Id
 * @param {string} params.buildingCode 教学楼编号
 * @param {int} params.currentPage 第几页，默认0
 * @param {int} params.numPerPage 每页条数，默认0，都为0表示查询全部
 */
export const getRoomListAPI = (
	params?: GetRoomListParamsType
): Promise<GetRoomListResponseType> => {
	return formDataHttp.post(`${baseUrl}/base/room/getRoomList`, params);
};

/**
 * @description 获课程列表
 * @param {string} params.codes 课堂编号,多个编号逗号分隔
 */
export const getCourseListAPI = (
	params?: GetCourseListParamsType
): Promise<GetCourseListResponseType> => {
	return formDataHttp.post(`${baseUrl}/base/course/getCourseList`, params);
};

/**
 * @description 通过该接口作息时间查询
 * @param {number} params.id 作息时间id
 * @param {number} params.seasonCode 季节编号
 * @param {number} params.searchDay 日期 yyyy-MM-dd hh:mm:ss
 */
export const getTimeTableListAPI = (
	params: GetTimeTableListParamsType
): Promise<GetTimeTableListResponseType> => {
	return formDataHttp.post(`${baseUrl}/base/course/timeTable/getTimeTableList`, params);
};

/**
 * @description 排课计划查询（aice）
 * @param {String} code 课程code
 */
export const getCourseProjectPage4AICEAPI = (
	code: string
): Promise<GetCourseProjectPage4AICEResponseType> => {
	return http.post(`${baseUrl}/base/course/courseSchedule/getCourseProjectPage4AICE`, { code });
};
